embed使用
背景
对于一个Go项目,我们一般将代码编译成出来的二进制可执行文件,这个文件非常适合复制和部署。但在实际使用中,除了代码,一些配置文件或者静态文件也需要一同打包至二进制文件中。
嵌入
嵌入的内容时只读的,也就是说,嵌入内容在编译期就定死并且是并发安全的
🌰:当前有一个txt文件,具体内容为Hello World!
嵌入为字符串
go
//go:embed hello.txt
var s string
func TestEmbed(t *testing.T) {
fmt.Println(s)
}
嵌入为字节切片
go
//go:embed hello.txt
var s []byte
func TestEmbed(t *testing.T) {
fmt.Println(s)
}
嵌入为文件系统
当需要一次性嵌入多个文件时,选择文件系统作为嵌入的类型有助于我们高效管理嵌入的多个文件
go
//go:embed *.txt
// 匹配多个文件
var fs embed.FS
func TestEmbed(t *testing.T) {
fb1, _ := fs.ReadFile("hello.txt")
fb2, _ := fs.ReadFile("hello2.txt")
fmt.Println(fb1)
fmt.Println(fb2)
}
几种go:embed写法
go
//go:embed hello.txt hello2.txt
var fs embed.FS
//go:embed hello.txt
//go:embed hello2.txt
var fs embed.FS
//go:embed p
var fs embed.FS // p是一个子目录
//go:embed *.txt
var fs embed.FS // 匹配模式